package main

import "fmt"

/**
 * @Author: DengLibin
 * @Date: Create in 2023-01-18 14:07:41
 * @Description: 415. 字符串相加
 给定两个字符串形式的非负整数 num1 和num2 ，
 计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库（比如 BigInteger），
也不能直接将输入的字符串转换为整数形式。
*/

/**
 * @Author: DengLibin
 * @Date: Create in 2023-01-18 14:07:43
 * @Description:
 */
func addStrings(num1 string, num2 string) string {
	l1 := len(num1)
	l2 := len(num2)
	var c1 rune = '0'
	var c2 rune = '0'
	var c3 rune = '0'
	var s string = ""
	var i1 int = l1 - 1
	var i2 int = l2 - 1

	for i1 >= 0 || i2 >= 0 {
		if i1 < l1 && i1 >= 0 {
			c1 = rune(num1[i1])
		} else {
			c1 = '0'
		}
		if i2 < l2 && i2 >= 0 {
			c2 = rune(num2[i2])
		} else {
			c2 = '0'
		}

		c, i := addChar(c1, c2, c3)
		c3 = i
		s = fmt.Sprintf("%c%s", c, s)
		i1--
		i2--
	}
	if c3 != '0' {
		s = fmt.Sprintf("%c%s", c3, s)
	}
	return s

}

//数字字符相加 返回 结果 和进位
func addChar(c1, c2, c3 rune) (rune, rune) {
	r := byte(c1) - 48 + byte(c2) - 48 + byte(c3) - 48
	if r < 10 {
		return rune(r + 48), '0'
	}
	return rune(r - 10 + 48), '1'

}
